﻿using DevExpress.Data.Filtering;
using DevExpress.Mvvm.Native;
using HandyControl.Controls;
using log4net;
using Newtonsoft.Json;
using PlaceOrder_Client.Events;
using PlaceOrder_Core.Helper;
using PlaceOrder_Core.Models.QuanYi;
using PlaceOrder_Core.PlaceOrderModels;
using PlaceOrder_Core.Services.Instances;
using PlaceOrder_Core.Services.Interfaces;
using PlaceOrder_Shared.Models.Common;
using PlaceOrder_Shared.Models.Trade;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace PlaceOrder_Client.ViewModels
{
    public class IndexViewModel:BindableBase
    {
        private readonly ILog _log;
        private readonly IDailyData _dailyData;
        private readonly IDataHelper _dataHelper;
        private WebSocketHelper websocket;
        public IndexViewModel(ILog log,IDailyData dailyData,IEventAggregator eventAggregator,IDataHelper dataHelper)
        {
            _log= log;
            _dailyData=dailyData;
            _dataHelper = dataHelper;
            TestCommand = new DelegateCommand(() => {
                eventAggregator.GetEvent<MessageEvent>().Publish(new MessageModel()
                {
                    Filter = "1",
                    Message = "nnnn"
                });
            });
            InitValue();
            SetOrderWindows();
        }

        private void SetOrderWindows()
        {
            var VolumeConfigs = _dataHelper.GetUserTradeVolumeConfig(UserHelper.UserID);
            string tmp = JsonHelper.GetJsonFile("OrderLayout.json");
            if (tmp != "")
            {
                /*orderWindowLayout = JsonHelper.DeserializeJsonToObject*/
            }
        }

        private async void InitValue()
        {
            UserData = await Task.Run(() => _dailyData.GetAllUsers().ToObservableCollection());
            Trades = await Task.Run(() => _dailyData.GetUserTrades().ToObservableCollection());


        }

        #region 依赖属性
        private ObservableCollection<TradeSimUser> userData;
        public ObservableCollection<TradeSimUser> UserData
        {
            get => userData;
            set
            {
                if (userData != value)
                {
                    userData = value;
                    RaisePropertyChanged();
                }
            }
        }


        private ObservableCollection<UserTrade> trades;
        public ObservableCollection<UserTrade> Trades
        {
            get => trades;
            set
            {
                if (trades != value)
                {
                    trades = value;
                    RaisePropertyChanged();
                }
            }
        }

      


     
        public DelegateCommand TestCommand { get; set; }
        #endregion

        public void StartService()
        {
            websocket = new WebSocketHelper();
        
            //Task.Factory.StartNew(() => GetChatMessage());
        }

        private void Websocket_QuanYiServerMessageEvent(QuanYiOrderServerResponseClass QSR)
        {
            try
            {
                UserTrade tmpTrade;
                TradeSimUser user;
                ChatReceiver chat;
                int result;
                int UserTradeID;
                string msg;
                int ActualVolume;
                switch (QSR.DataType)
                {
                    case QuanYiServerBaseClass.DataTypeEnum.Login:
                        user = UserData.Single(x => x.UserID == QSR.UserID);
                        user.Status = 1;
                        user.LoginTime = DateTime.Now;
                        QSR.Code = 0;
                        QSR.Message = "OK";
                        if (user.UserStatus > SimTradeUserStatusEnmu.Normal)
                        {
                            QSR.Code = 0;
                            QSR.Message = ((int)user.UserStatus).ToString();
                            QSR.DataType = QuanYiServerBaseClass.DataTypeEnum.UserStatusChange;
                            QSR.Trade = new UserTrade();
                            QSR.Trade.Time = user.DisabledTime;
                        }
                        break;
                    case QuanYiServerBaseClass.DataTypeEnum.Logout:
                        user = UserData.Single(x => x.UserID == QSR.UserID);
                        user.Status = 0;
                        user.LogoutTime = DateTime.Now;
                        //this.Invoke((MethodInvoker)delegate
                        //{
                        //    gridUserInfo.RefreshDataSource();
                        //});
                        return;
                    //case QuanYiServerBaseClass.DataTypeEnum.Order:
                    //    try
                    //    {
                    //        tmpTrade = Trades.SingleOrDefault(x => x.Guid == QSR.Trade.Guid);
                    //        if (tmpTrade != null)
                    //        {
                    //            QSR.Code = 8;
                    //            QSR.Message = "订单已存在";
                    //            QSR.DataType = QuanYiServerBaseClass.DataTypeEnum.Order;
                    //            break;
                    //        }
                    //        if (UserData.Single(x => x.UserID == QSR.UserID).UserStatus > UserHelper.SimTradeUserStatusEnmu.OnlyBalance)
                    //        {
                    //            QSR.Code = 10;
                    //            QSR.Message = "用户已被禁";
                    //            QSR.DataType = QuanYiServerBaseClass.DataTypeEnum.Order;
                    //            break;
                    //        }
                    //        QSR.Trade.Command = "";
                    //        int brokerid = 0;
                    //        if (QSR.Trade.ReceiverId == 0)
                    //        {
                    //            brokerid = 0;
                    //            List<BidHistory> AllowedBids = websocket.GetBidHistories(QSR.Trade.TsCode);
                    //            AllowedBids = AllowedBids.Where(x => UserData.Single(y => y.UserID == QSR.UserID).BrokerList.Contains(x.BrokerId)).ToList();
                    //            AllowedBids = AllowedBids.Where(x => !Trades.Where(y => y.OnHoldVolume > 0 & y.TsCode == QSR.Trade.TsCode & y.OrderType == QSR.Trade.OrderType).GroupBy(z => z.BrokerID).Select(z => z.Key).Contains(x.BrokerId)).ToList();
                    //            if (AllowedBids.Count == 0)
                    //            {
                    //                bool bFindSamePrice = false;
                    //                List<UserTrade> tmpTrades = Trades.Where(x => x.TsCode == QSR.Trade.TsCode & x.OrderType == QSR.Trade.OrderType).OrderBy(x => x.Price).ToList();
                    //                UserTrade t = null;
                    //                if (QSR.Trade.OrderType == UserTrade.UserTradeOrderTypeEnum.Bid)
                    //                {
                    //                    if (QSR.Trade.Price > Trades.Max(x => x.Price))
                    //                    {
                    //                        QSR.Code = 10;
                    //                        QSR.Message = "暂无可用中介";
                    //                        break;
                    //                    }
                    //                    else
                    //                    {
                    //                        t = tmpTrades.FirstOrDefault(x => x.Price == QSR.Trade.Price);
                    //                        if (t == null)
                    //                        {
                    //                            t = t = tmpTrades.Last();
                    //                        }
                    //                        else
                    //                        {
                    //                            bFindSamePrice = true;
                    //                        }
                    //                    }
                    //                }
                    //                else
                    //                {
                    //                    if (QSR.Trade.Price < Trades.Min(x => x.Price))
                    //                    {
                    //                        QSR.Code = 10;
                    //                        QSR.Message = "暂无可用中介";
                    //                        break;
                    //                    }
                    //                    else
                    //                    {
                    //                        t = tmpTrades.FirstOrDefault(x => x.Price == QSR.Trade.Price);
                    //                        if (t == null)
                    //                        {
                    //                            t = t = tmpTrades.First();
                    //                        }
                    //                        else
                    //                        {
                    //                            bFindSamePrice = true;
                    //                        }
                    //                    }
                    //                }
                    //                if (t == null)
                    //                {
                    //                    QSR.Code = 10;
                    //                    QSR.Message = "暂无可用中介";
                    //                    break;
                    //                }
                    //                brokerid = t.BrokerID;
                    //                string dtDate;
                    //                if (!bFindSamePrice)
                    //                {
                    //                    dtDate = t.DeliveryDate.Month.ToString() + "月" + t.DeliveryDate.Day.ToString() + "日";
                    //                    QSR.Trade.Command = $"T{t.DailyID:D3} {t.TsCode} {t.Price} {dtDate}+0 {t.Volume / 1000}k 改 ";
                    //                    if (QSR.Trade.Price != t.Price)
                    //                    {
                    //                        QSR.Trade.Command += $"{QSR.Trade.Price} ";
                    //                    }
                    //                    if (QSR.Trade.DeliveryDate != t.DeliveryDate)
                    //                    {
                    //                        dtDate = QSR.Trade.DeliveryDate.Month.ToString() + "月" + QSR.Trade.DeliveryDate.Day.ToString() + "日";
                    //                        QSR.Trade.Command += $"{dtDate} ";
                    //                    }
                    //                    if (QSR.Trade.Volume != t.Volume)
                    //                    {
                    //                        QSR.Trade.Command += $"{QSR.Trade.Volume / 1000}k ";
                    //                    }
                    //                }
                    //                userhepler.CancleUserTrade(t.UserTradeID, websocket.GetUserToken(t.UserID), out msg);
                    //            }
                    //            else
                    //            {
                    //                switch (QSR.Trade.OrderType)
                    //                {
                    //                    case UserTrade.UserTradeOrderTypeEnum.Bid:
                    //                        AllowedBids = AllowedBids.Where(x => x.BidType == BidHistory.enumBidType.Bid).OrderByDescending(x => x.Price).ThenBy(x => x.Volume).ToList();
                    //                        if (AllowedBids.Count > 0)
                    //                        {
                    //                            brokerid = AllowedBids.First().BrokerId;
                    //                            foreach (var b in AllowedBids)
                    //                            {
                    //                                if (QSR.Trade.Price <= b.Price)
                    //                                {
                    //                                    brokerid = b.BrokerId;
                    //                                    break;
                    //                                }
                    //                            }
                    //                        }
                    //                        else
                    //                        {
                    //                            brokerid = UserData.Single(y => y.UserID == QSR.UserID).BrokerList.First();
                    //                        }
                    //                        break;
                    //                    case UserTrade.UserTradeOrderTypeEnum.Ofr:
                    //                        AllowedBids = AllowedBids.Where(x => x.BidType == BidHistory.enumBidType.Ofr).OrderBy(x => x.Price).ThenBy(x => x.Volume).ToList();
                    //                        if (AllowedBids.Count > 0)
                    //                        {
                    //                            brokerid = AllowedBids.First().BrokerId;
                    //                            foreach (var b in AllowedBids)
                    //                            {
                    //                                if (QSR.Trade.Price >= b.Price)
                    //                                {
                    //                                    brokerid = b.BrokerId;
                    //                                    break;
                    //                                }
                    //                            }
                    //                        }
                    //                        else
                    //                        {
                    //                            brokerid = UserData.Single(y => y.UserID == QSR.UserID).BrokerList.First();
                    //                        }
                    //                        break;
                    //                    default:
                    //                        break;
                    //                }
                    //            }
                    //        }
                    //        else
                    //        {
                    //            chat = Receivers.Single(x => x.id == QSR.Trade.ReceiverId);
                    //            tmpTrade = Trades.FirstOrDefault(x => x.TsCode == QSR.Trade.TsCode & x.OrderType == QSR.Trade.OrderType & x.OnHoldVolume > 0 & x.BrokerID == chat.BrokerID);
                    //            if (tmpTrade != null)
                    //            {
                    //                if (tmpTrade.Price != QSR.Trade.Price)
                    //                {
                    //                    brokerid = 0;
                    //                    List<BidHistory> AllowedBids = websocket.GetBidHistories(QSR.Trade.TsCode);
                    //                    AllowedBids = AllowedBids.Where(x => UserData.Single(y => y.UserID == QSR.UserID).BrokerList.Contains(x.BrokerId)).ToList();
                    //                    AllowedBids = AllowedBids.Where(x => !Trades.Where(y => y.OnHoldVolume > 0 & y.TsCode == QSR.Trade.TsCode & y.OrderType == QSR.Trade.OrderType).GroupBy(z => z.BrokerID).Select(z => z.Key).Contains(x.BrokerId)).ToList();
                    //                    if (AllowedBids.Count == 0)
                    //                    {
                    //                        bool bFindSamePrice = false;
                    //                        List<UserTrade> tmpTrades = Trades.Where(x => x.TsCode == QSR.Trade.TsCode & x.OrderType == QSR.Trade.OrderType).OrderBy(x => x.Price).ToList();
                    //                        UserTrade t = null;
                    //                        if (QSR.Trade.OrderType == UserTrade.UserTradeOrderTypeEnum.Bid)
                    //                        {
                    //                            if (QSR.Trade.Price > Trades.Max(x => x.Price))
                    //                            {
                    //                                QSR.Code = 10;
                    //                                QSR.Message = "暂无可用中介";
                    //                                break;
                    //                            }
                    //                            else
                    //                            {
                    //                                t = tmpTrades.FirstOrDefault(x => x.Price == QSR.Trade.Price);
                    //                                if (t == null)
                    //                                {
                    //                                    t = t = tmpTrades.Last();
                    //                                }
                    //                                else
                    //                                {
                    //                                    bFindSamePrice = true;
                    //                                }
                    //                            }
                    //                        }
                    //                        else
                    //                        {
                    //                            if (QSR.Trade.Price < Trades.Min(x => x.Price))
                    //                            {
                    //                                QSR.Code = 10;
                    //                                QSR.Message = "暂无可用中介";
                    //                                break;
                    //                            }
                    //                            else
                    //                            {
                    //                                t = tmpTrades.FirstOrDefault(x => x.Price == QSR.Trade.Price);
                    //                                if (t == null)
                    //                                {
                    //                                    t = t = tmpTrades.First();
                    //                                }
                    //                                else
                    //                                {
                    //                                    bFindSamePrice = true;
                    //                                }
                    //                            }
                    //                        }
                    //                        if (t == null)
                    //                        {
                    //                            QSR.Code = 10;
                    //                            QSR.Message = "暂无可用中介";
                    //                            break;
                    //                        }
                    //                        brokerid = t.BrokerID;
                    //                        string dtDate = QSR.Trade.DeliveryDate.Month.ToString() + "月" + QSR.Trade.DeliveryDate.Day.ToString() + "日";
                    //                        if (!bFindSamePrice)
                    //                        {
                    //                            QSR.Trade.Command = $"ref T{t.DailyID:D3} {t.TsCode} {t.Price} {t.Volume / 1000}k 若撤单成功则 __TID__ {QSR.Trade.DealType} {QSR.Trade.TsCode.Replace(".IB", "")} {QSR.Trade.Price} {dtDate}+0 {QSR.Trade.Volume / 1000}k";
                    //                        }
                    //                        userhepler.CancleUserTrade(t.UserTradeID, websocket.GetUserToken(t.UserID), out msg);
                    //                    }
                    //                }
                    //                else
                    //                {
                    //                    brokerid = chat.BrokerID;
                    //                }
                    //            }
                    //            else
                    //            {
                    //                brokerid = chat.BrokerID;
                    //            }
                    //        }
                    //        chat = Receivers.Single(x => x.BrokerID == brokerid);
                    //        QSR.Trade.ChatID = chat.ChatID;
                    //        QSR.Trade.Broker = chat.Broker;
                    //        QSR.Trade.BrokerID = brokerid;
                    //        QSR.Trade.ReceiverId = chat.id;
                    //        chat.OrderInProgress = true;
                    //        QSR.Trade.Time = DateTime.Now;
                    //        QSR.Trade.UserName = UserData.Single(x => x.UserID == QSR.UserID).UserName;
                    //        result = userhepler.AddUserTrade(QSR.Trade, QSR.Token, out UserTradeID, out msg, out ActualVolume);
                    //        switch (result)
                    //        {
                    //            case 0:
                    //                daily.BondHelperSysLog(QSR.UserID, "Lily下单成功," + msg, UserTradeID);
                    //                QSR.Trade.OnHoldVolume = ActualVolume;
                    //                QSR.Trade.Volume = ActualVolume;
                    //                break;
                    //            case 1:
                    //                QSR.Message = msg;
                    //                QSR.Code = 6;
                    //                QSR.DataType = QuanYiServerBaseClass.DataTypeEnum.Order;
                    //                daily.BondHelperSysLog(QSR.UserID, "Lily下单失败, " + msg, 0);
                    //                break;
                    //            case 2:
                    //                QSR.Code = 4;
                    //                QSR.Message = msg;
                    //                daily.BondHelperSysLog(QSR.UserID, "Lily下单成功," + msg, UserTradeID);
                    //                QSR.Trade.Volume = ActualVolume;
                    //                QSR.Trade.OnHoldVolume = ActualVolume;
                    //                break;
                    //            default:
                    //                break;
                    //        }

                    //        QSR.Trade.UserTradeID = UserTradeID;

                    //        if (QSR.Code != 6)
                    //        {
                    //            CurrentDailyID++;
                    //            QSR.Trade.DailyID = CurrentDailyID;
                    //            if (!daily.AddUserTrade(QSR.Trade, out msg))
                    //            {
                    //                QSR.Message = msg;
                    //                QSR.Code = 6;
                    //                //MessageBox.Show("询价单已发送，但创建询价单失败", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    //                daily.BondHelperSysLog(QSR.UserID, "BondHelper下单失败" + msg, UserTradeID);
                    //            }
                    //            else
                    //            {
                    //                daily.BondHelperSysLog(QSR.UserID, "BondHelper下单成功" + msg, UserTradeID);
                    //            }
                    //            QSR.Trade.StatusText = "已接收";
                    //            Trades.Insert(0, QSR.Trade);
                    //            if (QSR.Trade.Command == "")
                    //            {
                    //                string dtDate = QSR.Trade.DeliveryDate.Month.ToString() + "月" + QSR.Trade.DeliveryDate.Day.ToString() + "日";
                    //                QSR.Trade.Command = $"T{QSR.Trade.DailyID:D3} {QSR.Trade.DealType} {QSR.Trade.TsCode.Replace(".IB", "")} {QSR.Trade.Price} {dtDate}+0 {QSR.Trade.Volume / 1000}k";
                    //            }
                    //            else
                    //            {
                    //                QSR.Trade.Command = QSR.Trade.Command.Replace("__TID__", $"T{QSR.Trade.DailyID.ToString("D3")}");
                    //            }
                    //            SendMessage(QSR.Trade);
                    //        }
                    //    }
                    //    catch (Exception ex)
                    //    {
                    //        log.Error(ex.Message, "QuanyiServer", "Socket_QuanYiClientMessageEvent", ex.StackTrace);
                    //        daily.BondHelperSysLog(QSR.UserID, "创建订单，" + ex.Message, QSR.Trade.UserTradeID);
                    //        QSR.Code = 7;
                    //        QSR.Message = ex.Message;
                    //        //websocket.SendResponseToClient(QSR);
                    //    }
                    //    break;
                    //case QuanYiServerBaseClass.DataTypeEnum.ChangePrice:
                    //    tmpTrade = Trades.SingleOrDefault(x => x.UserTradeID == QSR.Trade.UserTradeID);
                    //    if (tmpTrade == null)
                    //    {
                    //        daily.BondHelperSysLog(QSR.UserID, "Lily改价失败 - 无法找到该笔订单", tmpTrade.UserTradeID);
                    //        QSR.Code = 2;
                    //        QSR.Message = "无法找到该笔订单";
                    //        break;
                    //    }
                    //    if (tmpTrade.Status != 0 & tmpTrade.Status != 1 & tmpTrade.Status != 4)
                    //    {
                    //        daily.BondHelperSysLog(QSR.UserID, "Lily改价失败 - 该单已成交", tmpTrade.UserTradeID);
                    //        QSR.Code = 2;
                    //        QSR.Message = "该单已成交，无法改价";
                    //    }
                    //    else
                    //    {
                    //        string dtDate = tmpTrade.DeliveryDate.Month.ToString() + "月" + tmpTrade.DeliveryDate.Day.ToString() + "日";
                    //        QSR.Trade.Command = $"T{QSR.Trade.DailyID:D3} {QSR.Trade.TsCode} {tmpTrade.Price} {dtDate}+0 {tmpTrade.Volume / 1000}k 改 ";
                    //        if (QSR.Trade.Price != tmpTrade.Price)
                    //        {
                    //            QSR.Trade.Command += $"{QSR.Trade.Price} ";
                    //        }
                    //        if (QSR.Trade.DeliveryDate != tmpTrade.DeliveryDate)
                    //        {
                    //            dtDate = QSR.Trade.DeliveryDate.Month.ToString() + "月" + QSR.Trade.DeliveryDate.Day.ToString() + "日";
                    //            QSR.Trade.Command += $"{dtDate} ";
                    //        }
                    //        if (QSR.Trade.Volume != tmpTrade.Volume)
                    //        {
                    //            QSR.Trade.Command += $"{QSR.Trade.Volume / 1000}k ";
                    //        }
                    //        SendMessage(QSR.Trade);
                    //        QSR.Code = 0;
                    //        QSR.Message = "改价指令已发送";
                    //    }
                    //    break;
                    //case QuanYiServerBaseClass.DataTypeEnum.ChangePriceConfirm:
                    //    tmpTrade = Trades.SingleOrDefault(x => x.UserTradeID == QSR.Trade.UserTradeID);
                    //    if (tmpTrade == null)
                    //    {
                    //        daily.BondHelperSysLog(QSR.UserID, "Lily改价失败 - 无法找到该笔订单", tmpTrade.UserTradeID);
                    //        QSR.Code = 2;
                    //        QSR.Message = "无法找到该笔订单";
                    //        break;
                    //    }
                    //    if (tmpTrade.Status != 0 & tmpTrade.Status != 1 & tmpTrade.Status != 4)
                    //    {
                    //        QSR.Code = 2;
                    //        QSR.Message = "该单已成交，无法改价";
                    //    }
                    //    else
                    //    {
                    //        if (!userhepler.ModifyUserTrade(QSR.Trade, QSR.Token))
                    //        {
                    //            daily.BondHelperSysLog(QSR.UserID, "Lily改价失败", tmpTrade.UserTradeID);
                    //            QSR.Code = 2;
                    //            QSR.Message = "改价失败";
                    //            break;
                    //        }
                    //        if (!daily.UpdateUserTrade(QSR.Trade))
                    //        {
                    //            QSR.Code = 2;
                    //            QSR.Message = "改价失败";
                    //            break;
                    //        }

                    //        if (!daily.UpdateUserTrade(tmpTrade))
                    //        {
                    //            QSR.Code = 2;
                    //            QSR.Message = "改价失败";
                    //            log.Error($"改价：修改BondHelper询价单失败,{QSR.Trade.Command},{QSR.Trade.Target}", QSR.Trade.UserTradeID.ToString(), "", "");
                    //            daily.BondHelperSysLog(QSR.UserID, "修改BondHelper询价单失败", tmpTrade.UserTradeID);
                    //            break;
                    //        }
                    //        daily.BondHelperSysLog(QSR.UserID, "改价成功", tmpTrade.UserTradeID);
                    //        tmpTrade.Price = QSR.Trade.Price;
                    //        QSR.Code = 0;
                    //        QSR.Message = "订单已更新";
                    //    }
                    //    break;
                    //case QuanYiServerBaseClass.DataTypeEnum.Withdraw:
                    //    tmpTrade = Trades.SingleOrDefault(x => x.UserTradeID == QSR.Trade.UserTradeID);
                    //    if (tmpTrade == null)
                    //    {
                    //        daily.BondHelperSysLog(QSR.UserID, "撤单失败 - 无法找到该笔订单", QSR.Trade.UserTradeID);
                    //        QSR.Code = 3;
                    //        QSR.Message = "无法找到该笔订单";
                    //        break;
                    //    }
                    //    if (tmpTrade.Status != 0 & tmpTrade.Status != 1 & tmpTrade.Status != 4)
                    //    {
                    //        QSR.Code = 2;
                    //        QSR.Message = "该单已成交，无法改价";
                    //    }
                    //    else
                    //    {
                    //        QSR.Trade.Command = $"ref T{QSR.Trade.DailyID:D3} {QSR.Trade.TsCode} {QSR.Trade.Price} {QSR.Trade.OnHoldVolume / 1000}k";
                    //        SendMessage(QSR.Trade);
                    //    }
                    //    break;
                    //case QuanYiServerBaseClass.DataTypeEnum.Withdrawed:
                    //    tmpTrade = Trades.SingleOrDefault(x => x.UserTradeID == QSR.Trade.UserTradeID);
                    //    if (tmpTrade == null)
                    //    {
                    //        daily.BondHelperSysLog(QSR.UserID, "撤单失败 - 无法找到该笔订单", tmpTrade.UserTradeID);
                    //        QSR.Code = 3;
                    //        QSR.Message = "无法找到该笔订单";
                    //        break;
                    //    }
                    //    if (tmpTrade.Status != 0 & tmpTrade.Status != 1 & tmpTrade.Status != 4)
                    //    {
                    //        QSR.Code = 2;
                    //        QSR.Message = "该单已成交，无法改价";
                    //    }
                    //    else
                    //    {
                    //        if (!userhepler.CancleUserTrade(QSR.Trade.UserTradeID, QSR.Token, out msg))
                    //        {
                    //            daily.BondHelperSysLog(QSR.UserID, "Lily撤单失败", tmpTrade.UserTradeID);
                    //            QSR.Code = 3;
                    //            QSR.Message = "Lily撤单失败";
                    //            break;
                    //        }
                    //        else
                    //        {
                    //            daily.BondHelperSysLog(QSR.UserID, "撤单成功", tmpTrade.UserTradeID);
                    //            QSR.Code = 0;
                    //            QSR.Message = "撤单成功";
                    //            QSR.Trade.Status = 5;
                    //            QSR.Trade.StatusText = "已撤单";
                    //            tmpTrade.Status = 5;
                    //            tmpTrade.StatusText = "已撤单";
                    //        }
                    //    }
                    //    break;
                    //case QuanYiServerBaseClass.DataTypeEnum.BackdatedOrder:
                    //    result = userhepler.AddUserTrade(QSR.Trade, QSR.Token, out UserTradeID, out msg, out ActualVolume);
                    //    switch (result)
                    //    {
                    //        case 0:
                    //            daily.BondHelperSysLog(QSR.UserID, "Lily下单成功," + msg, UserTradeID);
                    //            QSR.Trade.Volume = ActualVolume;
                    //            break;
                    //        case 1:
                    //            QSR.Message = msg;
                    //            QSR.Code = 6;
                    //            daily.BondHelperSysLog(QSR.UserID, "Lily下单失败, " + msg, 0);
                    //            break;
                    //        case 2:
                    //            QSR.Message = msg;
                    //            QSR.Code = 4;
                    //            QSR.Trade.Volume = ActualVolume;
                    //            daily.BondHelperSysLog(QSR.UserID, "Lily下单成功," + msg, UserTradeID);
                    //            break;
                    //        default:
                    //            break;
                    //    }
                    //    QSR.Trade.UserTradeID = UserTradeID;

                    //    break;
                    //case QuanYiServerBaseClass.DataTypeEnum.Trade:
                    //    tmpTrade = Trades.SingleOrDefault(x => x.UserTradeID == QSR.Trade.UserTradeID);
                    //    if (tmpTrade == null)
                    //    {
                    //        daily.BondHelperSysLog(QSR.UserID, "撤单失败 - 无法找到该笔订单", tmpTrade.UserTradeID);
                    //        QSR.Code = 3;
                    //        QSR.Message = "无法找到该笔订单";
                    //        break;
                    //    }
                    //    tmpTrade.OnHoldVolume = QSR.Trade.OnHoldVolume;
                    //    tmpTrade.Status = QSR.Trade.Status;
                    //    tmpTrade.StatusText = QSR.Trade.StatusText;
                    //    daily.BondHelperSysLog(QSR.UserID, "Lily成交,", tmpTrade.UserTradeID);
                    //    break;
                    //case QuanYiServerBaseClass.DataTypeEnum.Ping:
                    //    QSR.Code = 0;
                    //    QSR.Message = "Pong";
                    //    break;
                    //case QuanYiServerBaseClass.DataTypeEnum.InitChatMessage:
                    //    foreach (var r in Receivers)
                    //    {
                    //        lock (r)
                    //        {
                    //            QuanYiOrderServerResponseClass msgQsr = new QuanYiOrderServerResponseClass();
                    //            msgQsr.UserID = QSR.UserID;
                    //            msgQsr.SessionID = QSR.SessionID;
                    //            msgQsr.BrokerID = r.BrokerID;
                    //            msgQsr.DataType = QuanYiServerBaseClass.DataTypeEnum.ChatMessage;
                    //            msgQsr.ChatImage = r.ChatMessage;
                    //            websocket.SendResponseToClient(msgQsr);
                    //        }
                    //    }
                    //    break;
                    //case QuanYiServerBaseClass.DataTypeEnum.ChatMessage:

                        //ChatReceiver r1 = Receivers.Single(x => x.BrokerID == QSR.BrokerID);
                        //if (r1 != null)
                        //{
                        //    UserTrade t = new UserTrade();
                        //    t.Broker = r1.Broker;
                        //    t.ChatID = r1.ChatID;
                        //    t.Command = QSR.Message;
                        //    t.ReceiverId = r1.id;
                        //    SendMessage(t);
                        //}
                        //break;
                    //case QuanYiServerBaseClass.DataTypeEnum.Deal:
                    //    if (websocket.UserTradeDeal(QSR.Trade, out msg))
                    //    {
                    //        QSR.Code = 0;
                    //    }
                    //    else
                    //    {
                    //        QSR.Code = 1;

                    //    }
                    //    QSR.Message = msg;
                    //    break;
                    //default:
                    //    break;
                }
                //websocket.SendResponseToClient(QSR);

               
            }
            catch (Exception ex)
            {
                AppLog.WriteError(ex.Message+"IndexViewModel"+"Socket_QuanYiClientMessageEvent"+ex.StackTrace);
                _dailyData.BondHelperSysLog(QSR.UserID, "客户端消息，" + ex.Message, QSR.Trade == null ? 0 : QSR.Trade.UserTradeID);
                QSR.Code = 7;
                QSR.Message = ex.Message;
                //websocket.SendResponseToClient(QSR);
            }
        }

     
    }
}
